package com.domain.utils.wyyx;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.message.BasicNameValuePair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class IMSndmsg {

    private static Logger logger = LoggerFactory.getLogger(IMSndmsg.class);
    private static String APPKEY = "f4969ff98d313177a195b652683c46ba";  //AppKey
    private static String SECRET = "02cd16703f58";  //AppSecret

    /**
     * 发送消息
     *
     * @param from 发送者accid
     * @param ope  0：点对点个人消息，1：群消息（高级群），其他返回414
     * @param to   ope==0是表示accid即用户id，ope==1表示tid即群id
     * @param type 0 表示文本消息,
     *             1 表示图片，
     *             2 表示语音，
     *             3 表示视频，
     *             4 表示地理位置信息，
     *             6 表示文件，
     *             100 自定义消息类型（特别注意，对于未对接易盾反垃圾功能的应用，该类型的消息不会提交反垃圾系统检测）
     * @param body 发送得内容最大长度5000字符，为一个JSON串
     * @return
     * @throws IOException
     */
    public static String sendMsg(String from, String ope, String to, String type, String body) throws IOException {
        String url = "https://api.netease.im/nimserver/msg/sendMsg.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("from", from));
        params.add(new BasicNameValuePair("ope", ope));
        params.add(new BasicNameValuePair("to", to));
        params.add(new BasicNameValuePair("type", type));
        String bodys = "{'msg':'" + body + "'}";
        params.add(new BasicNameValuePair("body", bodys));

        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

    /**
     * 创建高级群
     *
     * @param tname        群名称，最大长度64字符
     * @param owner        群主用户帐号，最大长度32字符
     * @param members      ["aaa","bbb"](JSONArray对应的accid，如果解析出错会报414)，一次最多拉200个成员
     * @param announcement 群公告，最大长度1024字符
     * @param intro        群描述，最大长度512字符
     * @param msg          邀请发送的文字，最大长度150字符
     * @param magree       管理后台建群时，0不需要被邀请人同意加入群，1需要被邀请人同意才可以加入群。其它会返回414
     * @param joinmode     群建好后，sdk操作时，0不用验证，1需要验证,2不允许任何人加入。其它返回414
     * @param beinvitemode 被邀请人同意方式，0-需要同意(默认),1-不需要同意。其它返回414
     * @param invitemode   谁可以邀请他人入群，0-管理员(默认),1-所有人。其它返回414
     * @param uptinfomode  谁可以修改群资料，0-管理员(默认),1-所有人。其它返回414
     * @return
     * @throws IOException
     */
    public static String createTeam(String tname, String owner, String members, String announcement, String intro, String msg, String magree, String joinmode, String beinvitemode, String invitemode, String uptinfomode) throws IOException {
        String url = "https://api.netease.im/nimserver/team/create.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tname", tname));
        params.add(new BasicNameValuePair("owner", owner));
        params.add(new BasicNameValuePair("members", members));
        params.add(new BasicNameValuePair("announcement", announcement));
        params.add(new BasicNameValuePair("intro", intro));
        params.add(new BasicNameValuePair("msg", msg));
        params.add(new BasicNameValuePair("magree", magree));
        params.add(new BasicNameValuePair("joinmode", joinmode));
        params.add(new BasicNameValuePair("beinvitemode", beinvitemode));
        params.add(new BasicNameValuePair("invitemode", invitemode));
        params.add(new BasicNameValuePair("uptinfomode", uptinfomode));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

    /**
     * 拉人入群
     *
     * @param tid     群唯一标识，创建群时会返回，最大长度128字符
     * @param owner   群主用户帐号，最大长度32字符
     * @param members ["aaa","bbb"](JSONArray对应的accid，如果解析出错会报414)，一次最多拉200个成员
     * @param magree  管理后台建群时，0不需要被邀请人同意加入群，1需要被邀请人同意才可以加入群。其它会返回414
     * @param msg     邀请发送的文字，最大长度150字符
     * @return
     * @throws IOException
     */
    public static String addTeam(String tid, String owner, String members, String magree, String msg) throws IOException {
        String url = "https://api.netease.im/nimserver/team/add.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("owner", owner));
        params.add(new BasicNameValuePair("members", members));
        params.add(new BasicNameValuePair("tid", tid));
        params.add(new BasicNameValuePair("msg", msg));
        params.add(new BasicNameValuePair("magree", magree));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }


    /**
     * 踢人出群
     *
     * @param tid    群唯一标识，创建群时会返回，最大长度128字符
     * @param owner  群主的accid，用户帐号，最大长度32字符
     * @param member 被移除人的accid，用户账号，最大长度32字符;注：member或members任意提供一个，优先使用member参数
     * @return
     * @throws IOException
     */
    public static String kickTeam(String tid, String owner, String member) throws IOException {
        String url = "https://api.netease.im/nimserver/team/kick.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("owner", owner));
        params.add(new BasicNameValuePair("member", member));
        params.add(new BasicNameValuePair("tid", tid));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

    /**
     * 查询指定群的详细信息（群信息+成员详细信息）
     *
     * @param tid 群id，群唯一标识，创建群时会返回
     *            1表示带上群成员列表，0表示不带群成员列表，只返回群信息
     * @return
     * @throws IOException
     */
    public static String queryDetailTeam(String tid, String ope) throws IOException {
        String url = "https://api.netease.im/nimserver/team/queryDetail.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tid", tid));
        params.add(new BasicNameValuePair("ope", ope));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

    /**
     * 修改消息提醒开关
     *
     * @param tid   群唯一标识，创建群时会返回
     * @param accid 要操作的群成员accid
     * @param ope   1：关闭消息提醒，2：打开消息提醒，其他值无效
     * @return
     * @throws IOException
     */
    public static String muteTeamTeam(String tid, String accid, String ope) throws IOException {
        String url = "https://api.netease.im/nimserver/team/muteTeam.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tid", tid));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

    /**
     * 消息撤回
     *
     * @param deleteMsgid 要撤回消息的msgid
     * @param timetag     要撤回消息的创建时间
     * @param type        7:表示点对点消息撤回，8:表示群消息撤回，其它为参数错误
     * @param from        发消息的accid
     * @param to          如果点对点消息，为接收消息的accid,如果群消息，为对应群的tid
     * @return
     * @throws IOException
     */
    public static String recall(String deleteMsgid, String timetag, String type, String from, String to) throws IOException {
        String url = "https://api.netease.im/nimserver/msg/recall.action";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("deleteMsgid", deleteMsgid));
        params.add(new BasicNameValuePair("timetag", timetag));
        params.add(new BasicNameValuePair("type", type));
        params.add(new BasicNameValuePair("from", from));
        params.add(new BasicNameValuePair("to", to));
        //UTF-8编码,解决中文问题
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        String res = NIMPost.postNIMServer(url, entity, APPKEY, SECRET);
        logger.info("createUser httpRes: {}", res);
        return res;
    }

}
